﻿#region Código Gerado Pela Fábrica de Software (Using)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using itau.im.entidade;
using EnterpriseLibraryWrapper;
using System.Data;
#endregion

#region Código Gerado Pela Fábrica de Software (Namespace)
namespace itau.im.dado
{
    #region Código Gerado Pela Fábrica de Software (Classe)

    public class GrupoParametrosDB : IGrupoParametrosDAO
    {
        #region Código Gerado Pela Fábrica de Software (Métodos)

        public void CriarProdutoFinanceiroAlocacao(ProdutoFinanceiroAlocacao produtoFinanceiroAlocacao)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_PROD_FINN_DR", produtoFinanceiroAlocacao.CodigoProdutoFinanceiroDerivado, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_AT", produtoFinanceiroAlocacao.CodigoGrupoParametroAtribuicao, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@DAT_INIO_VIGE_PR", produtoFinanceiroAlocacao.DataInicioVigenciaProduto, DbType.DateTime));

                if (produtoFinanceiroAlocacao.DataFimVigencia == DateTime.MinValue)
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@DAT_FIM_VIGE", DBNull.Value, DbType.DateTime));
                }
                else
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@DAT_FIM_VIGE", produtoFinanceiroAlocacao.DataFimVigencia, DbType.DateTime));
                }

                data.ExecuteNonQuery("DB2IM.IMSK9");

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public bool ValidaProdutoFinanceiroAlocacaoExistente(int codProdutoFinanceiroDerivado)
        {
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_PROD_FINN_DR", codProdutoFinanceiroDerivado, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS99");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
            }
            return false;
        }

        public IList<ParametroAtribuicao> ObterParametrosAtribuicaoPorGrupoVigente(int codigoGrupo)
        {
            List<ParametroAtribuicao> lista;
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                lista = new List<ParametroAtribuicao>();

                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS16");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        lista.Add(EntidadeFactory.getParametroAtribuicao2(linha));
                    }
                }

                return lista;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                lista = null;
                data.Dispose();
                data = null;
                ds = null;
            }

            return new List<ParametroAtribuicao>();
        }

        public void AtualizarParametroAtribuicaoGrupoAlocacao(ParametroAtribuicaoGrupoAlocacao parametroAtribuicaoGrupoAlocacao)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", parametroAtribuicaoGrupoAlocacao.CodigoGrupoParametroAtribuicao, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@COD_PARM_ATRI", parametroAtribuicaoGrupoAlocacao.CodigoParametroAtribuicao, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@DAT_INIO_VIGE_PAR", parametroAtribuicaoGrupoAlocacao.DataInicioVigenciaGrupo, DbType.DateTime));
                data.ParameterIn.Add(new ParameterInWrapper("@COD_DOMN_PARM_ATR", parametroAtribuicaoGrupoAlocacao.CodigoDominioParametroAtribuicao, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_PARM_ATRI", parametroAtribuicaoGrupoAlocacao.TextoValorParametroAtribuicao, DbType.String));
                data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_ATRI_FIM", parametroAtribuicaoGrupoAlocacao.TextoValorAtribuicaoFim, DbType.String));
                data.ParameterIn.Add(new ParameterInWrapper("@DAT_FIM_VIGE", parametroAtribuicaoGrupoAlocacao.DataFimVigencia, DbType.DateTime));

                data.ExecuteNonQuery("DB2IM.IMS15");

                data.ParameterIn.Clear();

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public void RemoverGrupoParametroAtribuicao(int codigoGrupo)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                data.ExecuteNonQuery("DB2IM.IMS19");

                data.ParameterIn.Clear();

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public void RemoverGrupoParametroAtribuicaoLogica(int codigoGrupo)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                data.ExecuteNonQuery("DB2IM.IMS1Z");

                data.ParameterIn.Clear();

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public void AtualizarProdutoFinanceiroAlocacao(ProdutoFinanceiroAlocacao produtoFinanceiroAlocacao)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", produtoFinanceiroAlocacao.CodigoGrupoParametroAtribuicao, DbType.Int32));

                data.ParameterIn.Add(new ParameterInWrapper("@WDAT_FIM_VIGE", produtoFinanceiroAlocacao.DataFimVigencia, DbType.DateTime));

                data.ExecuteNonQuery("DB2IM.IMS14");

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public void AtualizarProdutoFinanceiroAlocacaoPorCodigoProdutoAlocacao(ProdutoFinanceiroAlocacao produtoFinanceiroAlocacao)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", produtoFinanceiroAlocacao.CodigoGrupoParametroAtribuicao, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@WDAT_FIM_VIGE", produtoFinanceiroAlocacao.DataFimVigencia, DbType.DateTime));
                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_PROD_FINN_DRVD", produtoFinanceiroAlocacao.CodigoProdutoFinanceiroDerivado, DbType.Int32));

                data.ExecuteNonQuery("DB2IM.IM0SP8");

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public int CriarGrupoParametros(GrupoParametroAtribuicao grupoParametro)
        {
            IDataAccessWrapper data = null;
            DataSet ds = null;
            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@NOM_GRUP_PARM_AT", grupoParametro.NomeGrupoParametroAtribuicao, DbType.String));
                data.ParameterIn.Add(new ParameterInWrapper("@DES_GRUP_PARM_AT", grupoParametro.DescricaoGrupoParametroAtribuicao, DbType.String));
                data.ParameterOut.Add(new ParameterOutWrapper("@COD_GRUP_PARM_ATR", DbType.Int32, 4));

                ds = data.ExecuteParameterToDataSet("DB2IM.IMSKB");

                return Convert.ToInt32(ds.Tables[0].Rows[0]["COD_GRUP_PARM_ATR"]);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
            }
            return 0;
        }

        public IList<ParametroAtribuicaoGrupoAlocacao> ObterParametrosAtribuicaoGrupoAlocacaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            List<ParametroAtribuicaoGrupoAlocacao> listaRetorno = new List<ParametroAtribuicaoGrupoAlocacao>();
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATRI", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS13");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaRetorno.Add(EntidadeFactory.getParametroAtribuicaoGrupoAlocacao(linha));
                    }
                }

                return listaRetorno;

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
                listaRetorno = null;
            }

            return new List<ParametroAtribuicaoGrupoAlocacao>();
        }

        public IList<ProdutoFinanceiro> ObterProdutosFinanceirosNaoAlocados()
        {
            List<ProdutoFinanceiro> listaProdutosNaoAlocados = new List<ProdutoFinanceiro>();
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                ds = data.ExecuteDataSet("DB2IM.IMS11");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaProdutosNaoAlocados.Add(EntidadeFactory.getProdutoFinanceiro(linha));
                    }
                }

                return listaProdutosNaoAlocados;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
                listaProdutosNaoAlocados = null;
            }

            return new List<ProdutoFinanceiro>();
        }

        public IList<ProdutoFinanceiroDerivado> ObterProdutosFinanceirosDerivadosNaoAlocados()
        {
            List<ProdutoFinanceiroDerivado> listaProdutosDerivadosNaoAlocados = new List<ProdutoFinanceiroDerivado>();
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                ds = data.ExecuteDataSet("DB2IM.IM0S9D");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaProdutosDerivadosNaoAlocados.Add(EntidadeFactory.getProdutoFinanceiroDerivado(linha));
                    }
                }

                return listaProdutosDerivadosNaoAlocados;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
                listaProdutosDerivadosNaoAlocados = null;
            }

            return new List<ProdutoFinanceiroDerivado>();
        }

        public IList<ProdutoFinanceiro> ObterProdutosFinanceirosPorGrupoParametrosVigente(int codigoGrupo)
        {
            List<ProdutoFinanceiro> listaRetorno = new List<ProdutoFinanceiro>();
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS12");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaRetorno.Add(EntidadeFactory.getProdutoFinanceiro(linha));
                    }
                }

                return listaRetorno;

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                ds = null;
                listaRetorno = null;
            }

            return new List<ProdutoFinanceiro>();
        }

        public IList<ProdutoFinanceiroAlocacao> ObterProdutoFinanceiroAlocacaoPorGrupoParametro(int codigoGrupoParametro)
        {
            IDataAccessWrapper data = null;
            IList<ProdutoFinanceiroAlocacao> listaProdutoFinanceiroAlocacao = null;
            DataSet dsProd;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                listaProdutoFinanceiroAlocacao = new List<ProdutoFinanceiroAlocacao>();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", codigoGrupoParametro, DbType.Int32));

                dsProd = data.ExecuteDataSet("DB2IM.IM0S9E");

                if (dsProd.Tables.Count > 0 && dsProd.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow itemProdutoAlocacao in dsProd.Tables[0].Rows)
                    {
                        listaProdutoFinanceiroAlocacao.Add(EntidadeFactory.getProdutoFinanceiroAlocacao(itemProdutoAlocacao));
                    }
                }

                return listaProdutoFinanceiroAlocacao;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
                dsProd = null;
                listaProdutoFinanceiroAlocacao = null;
            }

            return null;
        }

        public IList<ProdutoFinanceiro> ObterProdutosExcecaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            IDataAccessWrapper data = null;
            DataSet ds;
            List<ProdutoFinanceiro> lista = new List<ProdutoFinanceiro>();

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS23");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        lista.Add(EntidadeFactory.getProdutoFinanceiro(linha));
                    }
                }

                return lista;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                ds = null;
                data.Dispose();
                data = null;
                lista = null;
            }

            return new List<ProdutoFinanceiro>();
        }

        public IList<ProdutoFinanceiroDerivado> ObterProdutosFinanceirosDerivadosExcecaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            IDataAccessWrapper data = null;
            DataSet ds;
            List<ProdutoFinanceiroDerivado> lista = new List<ProdutoFinanceiroDerivado>();

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS2W");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        lista.Add(EntidadeFactory.getProdutoFinanceiroDerivado(linha));
                    }
                }

                return lista;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                ds = null;
                data.Dispose();
                data = null;
                lista = null;
            }

            return new List<ProdutoFinanceiroDerivado>();
        }

        public IList<DominioParametroAtribuicao> ObterDominiosParametrosAtribuicaoPorGrupoVigente(int codigoGrupo)
        {
            List<DominioParametroAtribuicao> lista;
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                lista = new List<DominioParametroAtribuicao>();

                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS18");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        lista.Add(EntidadeFactory.getDominioParametroAtribuicao(linha));
                    }
                }

                return lista;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                lista = null;
                data.Dispose();
                data = null;
                ds = null;
            }

            return new List<DominioParametroAtribuicao>();
        }

        public IList<GrupoParametroAtribuicao> ObterGruposDeParametros()
        {
            List<GrupoParametroAtribuicao> listGrupoParametroAtribuicao = new List<GrupoParametroAtribuicao>();

            IDataAccessWrapper data = null;
            DataSet ds = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                ds = data.ExecuteDataSet("DB2IM.IMSEM");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listGrupoParametroAtribuicao.Add(EntidadeFactory.getGrupoParametroAtribuicao(linha));
                    }
                }

                return listGrupoParametroAtribuicao;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                listGrupoParametroAtribuicao = null;
                data.Dispose();
                data = null;
                ds = null;
            }

            return new List<GrupoParametroAtribuicao>();
        }

        public int ObterNumeroParametroAtribuicaoGrupoAlocacaoPorCodigoDominio(int codigoDominio)
        {
            int numeroParametro = 0;

            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_DOMN_PARM_ATR", codigoDominio, DbType.Int32));
                data.ParameterOut.Add(new ParameterOutWrapper("@CONTA", DbType.Int32, 4));

                numeroParametro = Convert.ToInt32(data.ExecuteParameterToDataSet("DB2IM.IMS33").Tables[0].Rows[0]["CONTA"]);

                return numeroParametro;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }

            return numeroParametro = 0;

        }

        public void CriarParametroAtribuicaoGrupoAlocacao(ParametroAtribuicaoGrupoAlocacao parametroAlocacao)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_AT", parametroAlocacao.CodigoGrupoParametroAtribuicao, DbType.Int32));

                data.ParameterIn.Add(new ParameterInWrapper("@COD_PARM_ATRI", parametroAlocacao.CodigoParametroAtribuicao, DbType.Int32));

                if (parametroAlocacao.CodigoDominioParametroAtribuicao != 0)
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@COD_DOMN_PARM_AT", parametroAlocacao.CodigoDominioParametroAtribuicao, DbType.Int32));
                }
                else
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@COD_DOMN_PARM_AT", DBNull.Value, DbType.Int32));
                }

                if (string.IsNullOrEmpty(parametroAlocacao.TextoValorParametroAtribuicao))
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_PARM_AT", DBNull.Value, DbType.String));
                }
                else
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_PARM_AT", parametroAlocacao.TextoValorParametroAtribuicao, DbType.String));
                }

                if (string.IsNullOrEmpty(parametroAlocacao.TextoValorAtribuicaoFim))
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_ATRI_FI", DBNull.Value, DbType.String));
                }
                else
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@TXT_VLR_ATRI_FI", parametroAlocacao.TextoValorAtribuicaoFim, DbType.String));
                }

                if (parametroAlocacao.DataFimVigencia != DateTime.MinValue)
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@DAT_FIM_VIGE", parametroAlocacao.DataFimVigencia, DbType.DateTime));
                }
                else
                {
                    data.ParameterIn.Add(new ParameterInWrapper("@DAT_FIM_VIGE", DBNull.Value, DbType.DateTime));
                }

                data.ExecuteNonQuery("DB2IM.IMSK5");
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public IList<ParametroAtribuicao> ObterParametrosNaoAlocadosPorGrupoParametroVigente(int codigoGrupo)
        {
            List<ParametroAtribuicao> listaParametrosExogenos;
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                listaParametrosExogenos = new List<ParametroAtribuicao>();

                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS22");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaParametrosExogenos.Add(EntidadeFactory.getParametroAtribuicao(linha));
                    }
                }

                return listaParametrosExogenos;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                listaParametrosExogenos = null;
                data.Dispose();
                data = null;
                ds = null;
            }

            return new List<ParametroAtribuicao>();
        }

        public int ObterNumeroParametrosAtribuicaoGrupoAlocacaoPorCodigoParametro(int codigoParametro)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_PARM_ATRI", codigoParametro, DbType.Int32));
                data.ParameterOut.Add(new ParameterOutWrapper("@CONTA", DbType.Int32, 4));

                return Convert.ToInt32(data.ExecuteParameterToDataSet("DB2IM.IMS31").Tables[0].Rows[0]["CONTA"]);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }

            return 0;
        }

        public IList<RegraAtribuicaoCurva> ObterRegras(int codigoGrupo, DateTime dataInclusaoVigencia)
        {
            List<RegraAtribuicaoCurva> listaRegras;
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                listaRegras = new List<RegraAtribuicaoCurva>();

                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@DAT_INIO_VIGE", dataInclusaoVigencia, DbType.DateTime));

                ds = data.ExecuteDataSet("DB2IM.IMS55");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaRegras.Add(EntidadeFactory.getRegraAtribuicaoCurvaIMS55(linha));
                    }
                }

                return listaRegras;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                listaRegras = null;
                data = null;
                ds = null;
            }

            return new List<RegraAtribuicaoCurva>();
        }

        public int ObterCodigoGrupoParametroAtribuicao(ProdutoFinanceiroDerivado objProdutoFinanceiroDerivado, DateTime dataInicioVigencia)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@WCOD_PROD_FINN_DRV", objProdutoFinanceiroDerivado.CodigoProdutoFinanceiroDerivado, DbType.Int32));
                data.ParameterIn.Add(new ParameterInWrapper("@WDAT_INIO_VIGE_PRO", dataInicioVigencia, DbType.DateTime));
                data.ParameterOut.Add(new ParameterOutWrapper("@WCOD_GRUP_PARM_ATR", DbType.Int32, 4));

                var ds = data.ExecuteParameterToDataSet("DB2IM.IMS1K");
                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    int codGrupo = 0;
                    object valorCodGrupoRow = ds.Tables[0].Rows[0]["WCOD_GRUP_PARM_ATR"];

                    if (valorCodGrupoRow != System.DBNull.Value)
                        codGrupo = Convert.ToInt32(valorCodGrupoRow);

                    return codGrupo;
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }

            return 0;
        }

        public IList<ProdutoFinanceiroAlocacao> ObterProdutoFinanceiroAlocacaoPorProdutoDerivado(ProdutoFinanceiroDerivado objProdutoFinanceiroDerivado)
        {
            List<ProdutoFinanceiroAlocacao> listaProdutoFinanceiroAlocacao;
            IDataAccessWrapper data = null;
            DataSet ds;

            try
            {
                listaProdutoFinanceiroAlocacao = new List<ProdutoFinanceiroAlocacao>();

                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_PROD_FINN_DRV", objProdutoFinanceiroDerivado.CodigoProdutoFinanceiroDerivado, DbType.Int32));

                ds = data.ExecuteDataSet("DB2IM.IMS99");

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow linha in ds.Tables[0].Rows)
                    {
                        listaProdutoFinanceiroAlocacao.Add(EntidadeFactory.getProdutoFinanceiroAlocacao(linha));
                    }
                }

                return listaProdutoFinanceiroAlocacao;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                listaProdutoFinanceiroAlocacao = null;
                data.Dispose();
                data = null;
                ds = null;
            }

            return null;
        }

        public void RemoverProdutoFinanceiroAlocacoes(int codigoGrupo)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                data.ExecuteNonQuery("DB2IM.IMS20");

                data.ParameterIn.Clear();

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        public void RemoverParametroAtribuicaoGrupoAlocacoes(int codigoGrupo)
        {
            IDataAccessWrapper data = null;

            try
            {
                data = EnterpriseLibraryFactory.GetDataAccess();

                data.ParameterIn.Add(new ParameterInWrapper("@COD_GRUP_PARM_ATR", codigoGrupo, DbType.Int32));

                data.ExecuteNonQuery("DB2IM.IMS21");

                data.ParameterIn.Clear();

            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosDados");
            }
            finally
            {
                data.Dispose();
                data = null;
            }
        }

        #endregion
    }

    #endregion
}
#endregion